﻿using System;
using System.Collections.Generic;
using Nop.Core.Domain.Logistics;
using Nop.Core.Domain.Shipping;

namespace Nop.Services.Logistics
{
    public interface IPackageHandle
    {
        bool CanCancel();
        void Cancel();
        bool CanChangeDeliveryAddress();
        bool CanChangePickupAddress();
        bool CanDeliver();
        bool CanUpdate();
        void ChangeDeliveryAddress(int addressId);
        void ChangePickupAddress(int addressId);
        void FailDelivery(PackageNoteTemplate failedReasonTemplate);
        List<ShippingStatus> GetNextStatuses();
        bool IsChangeDeliveryAddressFree();
        void UpdateStatus(ShippingStatus status);
        string GetStateString();
        bool CanScheduleDelivery();
        bool IsScheduleDeliveryFree();
        void ScheduleDelivery(DateTime date);
        void WarehousePickUp(int warehouseId);
    }
}
